﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Sinacor.Tools.Entidade
{
    [Serializable()]
    public class MensagemExcecao : Dominio<int?>, IComparer<MensagemExcecao>
    {
        private static string _propriedadeSort = string.Empty;
        private string _submodulo = string.Empty;
        private string _modulo = string.Empty;
        private Mensagem _mensagem = new Mensagem();

        public Mensagem Mensagem
        {
            get { return this._mensagem; }
            set { this._mensagem = value; }
        }

        public string Submodulo
        {
            get { return this._submodulo; }
            set { this._submodulo = value; }
        }

        public string Modulo
        {
            get { return this._modulo; }
            set { this._modulo = value; }
        }

        public int? CodigoMensagem
        {
            get { return this._mensagem.Id; }
        }

        public string ResourceKey
        {
            get { return this._mensagem.ResourceKey; }
        }

        public static string PropriedadeSort
        {
            get { return _propriedadeSort; } //incluido - esertorio/npaulo - 200809262049
            set { _propriedadeSort = value; }
        }


        #region IComparer<Mensagem> Members

        public int Compare(MensagemExcecao x, MensagemExcecao y)
        {
            int resultado = 0;
            switch (_propriedadeSort.ToLower())
            {
                case "modulo":
                    resultado = x._modulo.CompareTo(y._modulo);
                    break;

                case "submodulo":
                    resultado = x._submodulo.CompareTo(y._submodulo);
                    break;

                case "resourcekey":
                    resultado = string.Compare(x.ResourceKey, y.ResourceKey);
                    break;
                
                case "descricao":
                    resultado = x.Descricao.CompareTo(y.Descricao);
                    break;

                case "codigomensagem":
                    resultado = Nullable.Compare<int>(x.CodigoMensagem, y.CodigoMensagem);
                    break;


                default:
                    resultado = Nullable.Compare<int>(x.Id, y.Id);
                    break;

            }
            return resultado;
        }

        #endregion

        #region ICloneable Members

        //incluido - esertorio/npaulo - 200809262045
        public object Clone()
        {
            MensagemExcecao msg = new MensagemExcecao();

            if(this._mensagem!=null)
                msg._mensagem = (Entidade.Mensagem) this._mensagem.Clone();

            msg._modulo = this._modulo;
            msg._submodulo = this._submodulo;

            return msg;
        }

        #endregion

    }
}
